查看原文
其他

SPF——防钓鱼及垃圾邮件技术详解

老李头 运维研习社 2022-11-05


        

       


SPF简介

      

        SPF,全称为 Sender Policy Framework,即发件人策略框架。

当前 Email 通信,还是在使用 SMTP 这个协议。SMTP 的全称为 Simple Mail Transfer Protocol,即「简单邮件传输协议」。正如它的名字锁暗示的,SMTP 实际上是一个非常简单(甚至简陋)的传输协议,本身并没有很好的安全措施。根据 SMTP 的规则,发件人的邮箱地址是可以由发信方任意声明的。在SMTP 协议制定的时候也许还好,但在垃圾和诈骗邮件横行的今天,这显然是极不安全的。

        SPF 出现的目的,就是为了防止随意伪造发件人。

    

SPF记录原理


        SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

        假设邮件服务器收到了一封邮件,来自主机的 IP 是222.91.123.220,并且声称发件人为email@example.com。为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。如果该域的 SPF 记录设置允许 IP 为222.91.123.200的主机发送邮件,则服务器就认为这封邮件是合法的;如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

        钓鱼邮件虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;同时他也无法伪造自己的 IP 地址。因此 SPF 是很有效的,当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。


SPF语法

        

一条 SPF 记录定义了一个或者多个 mechanism,而 mechanism 则定义了哪些 IP 是允许的,哪些 IP 是拒绝的。

这些 mechanism 包括以下几类:

all | ip4 | ip6 | a | mx | ptr | exists | include

每个 mechanism 可以有四种前缀:

  • "+"  Pass(通过)

  • "-"  Fail(拒绝)

  • "~"  Soft Fail(软拒绝)

  • "?"  Neutral(中立)

        查询时,将从前往后依次查询每个 mechanism。如果一个 mechanism 包含了要查询的 IP 地址(称为命中),则查询结果由相应 mechanism 的前缀决定。默认的前缀为+。如果测试完所有的 mechanisms 也没有命中,则结果为 Neutral。

        除了以上四种情况,还有 None(无结果)、PermError(永久错误)和 TempError(临时错误)三种其他情况。对于这些情况的解释和服务器通常的处理办法如下:

下面详细分析每个Mechanisms

all

表示所有 IP,肯定会命中。因此通常把它放在 SPF 记录的结尾,表示处理剩下的所有情况。例如:

  • "v=spf1 -all" 拒绝所有(表示这个域名不会发出邮件)

  • "v=spf1 +all" 接受所有(域名所有者认为 SPF 是没有用的,或者根本不在乎它)

ip4

格式为ip4:<ip4-address>或者ip4:<ip4-network>/<prefix-length>,指定一个 IPv4 地址或者地址段。如果prefix-length没有给出,则默认为/32。例如:

  • "v=spf1 ip4:192.168.0.1/16 -all"

只允许在 192.168.0.1 ~ 192.168.255.255 范围内的 IP

ip6

格式和ip4的很类似,默认的prefix-length/128。例如:

  • "v=spf1 ip6:1080::8:800:200C:417A/96 -all"

只允许在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 范围内的 IP

a 和 mx

这俩的格式是相同的,以a为例,格式为以下四种之一:

  • a

  • a/<prefix-length>

  • a:<domain>

  • a:<domain>/<prefix-length>

会命中相应域名的 a 记录(或 mx 记录)中包含的 IP 地址(或地址段)。如果没有提供域名,则使用当前域名。例如:

  • "v=spf1 mx -all"

允许当前域名的 mx 记录对应的 IP 地址。

  • "v=spf1 mx mx:deferrals.example.com -all"

允许当前域名和 deferrals.example.com 的 mx 记录对应的 IP 地址。

  • "v=spf1 a/24 -all"

类似地,这个用法则允许一个地址段。

例如,这是一个比较常见的 SPF 记录,它表示支持当前域名的 a 记录和 mx 记录,同时支持一个给定的 IP 地址;其他地址则拒绝:

  • v=spf1 a mx ip4:173.194.72.103 -all

include

格式为include:<domain>,表示引入<domain>域名下的 SPF 记录。注意,如果该域名下不存在 SPF 记录,则会导致一个PermError结果。例如:

  • "v=spf1 include:example.com -all"

即采用和 example.com 完全一样的 SPF 记录

exists

格式为exists:<domain>。将对<domain>执行一个 A 查询,如果有返回结果(无论结果是什么),都会看作命中。

ptr

格式为ptr或者ptr:<domain>。使用ptr机制会带来大量很大开销的 DNS 查询,所以连官方都不推荐使用它。


SPF记录查询

windows:

nslookup -qt=txt example.com

linux:

dig -t txt example.com


其他


spf官网:http://www.openspf.org/

spf验证:http://www.kitterman.com/spf/validate.html

其他技术:DKIM,DKIM也是一种防垃圾软件技术,在国外用的比较多

伪造钓鱼软件:swaks



往期精彩内容推荐

【环境配置】如何建立你的HTTPS站点

【开源技术】浅谈Rabbi    tmq

【环境配置】趣玩nginx——限速

【硬件配置】Matrix RAID

【运维开发】运维必备服务器分析shell

【nginx优化】使用socket方式链接Nginx优化php-fpm性能

【开源技术】Redis原理与实践浅析

【网络基础】CIsco设备基础配置

【运维安全】Clam AV——linux杀毒利器

【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器

【实践分享】Linode VPS和Vultr VPS使用体检对比

【开源技术】Jenkins系列——简介及安装

【开源技术】Jenkins系列——管理及配置

【开源技术】Jenkins系列——项目构建

【开源工具】GoAccess——Web日志分析利器

【开源技术】LVS无损硬盘替换

【运维安全】linux密钥登陆

【linux安全】linux系统之pam模块








您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存